package org.example;

import java.util.HashMap;
import java.util.Map;

public class Test1 {
    //leetcode 同构字符串
    //https://leetcode.cn/problems/isomorphic-strings/description/?envType=study-plan-v2&envId=top-interview-150

    /**
     * 分别定义两个哈希表，分别存放s对t的映射关系和t对s的映射关系
     * 在便利的时候，首先看两个哈希表中是否存在映射，如果一个存在一个不存在，那么肯定就不是同构字符串
     * 如果都不存在，那么就分别在两个哈希表中存放对方的映射
     * 如果都存在，那么就判断两个哈希表中存放的因映射是否等于对方
     * @param s
     * @param t
     * @return
     */
    public boolean isIsomorphic(String s, String t) {
        int n1 = s.length(), n2 = t.length();
        if (n1 != n2) return false;
        Map<Character,Character> hash1 = new HashMap<>();
        Map<Character,Character> hash2 = new HashMap<>();
        for (int i = 0; i < n1; i++) {
            char c1 = s.charAt(i), c2 = t.charAt(i);
            Character c3 = hash1.get(c1), c4 = hash2.get(c2);
            if (c3 == null && c4 == null) {
                hash1.put(c1,c2);
                hash2.put(c2,c1);
            }else if (c3 != null && c4 != null) {
                if (c1 != c4 || c2 != c3) return false;
            }else {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        Map<Character,Character> hash = new HashMap<>();
        hash.put('a','b');
        Character c1 = 'a';
        Character c2 = 'b';
    }
}
